/*
 * UnaryToUnaryRecursionRemover.java
 *
 * Created on February 20, 2007, 8:25 PM
 * This interface specifies methods to take a <code>Tree</code> of
 * the form: A -> B (where B also has the form B -> C) --- i.e., a unary
 * projection whose daughter is also a unary projection, and recursively
 * remove the daughter unary nodes so that there are no more unary projections.
 * 
 * So:    A            
 *        |           
 *        B           
 *        |           A...
 *       ...    ==>  / \
 *        |         P   Q
 *        Z
 *      /   \
 *     P     Q
 *
 * Depending on the implementation, the A... can maintain information about
 * what the form of the series of unary projections was like.  So, in the above
 * example, the resulting category for A can be just A, or A^B^...^Z, or just
 * A^Z, etc.  The key point is that there is no longer any more unary recursion and
 * that the rest of the tree remains untransformed.
 */

package galronnlp.util;

/**
 *
 * @author Dennis N. Mehay
 */

/**
 * @param t A <code>Tree</code> possibly with instances of unary productions.
 * @result A <code>Tree</code> without any unary productions.
 */
public interface UnaryToUnaryRecursionRemover {
    public Tree removeUnaryProductions(Tree t);
}
